{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_community.document_loaders import TextLoader\n",
    "from langchain_text_splitters import CharacterTextSplitter"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 加载源数据文档"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Created a chunk of size 109, which is longer than the specified 50\n",
      "Created a chunk of size 65, which is longer than the specified 50\n",
      "Created a chunk of size 143, which is longer than the specified 50\n",
      "Created a chunk of size 833, which is longer than the specified 50\n",
      "Created a chunk of size 263, which is longer than the specified 50\n",
      "Created a chunk of size 304, which is longer than the specified 50\n",
      "Created a chunk of size 609, which is longer than the specified 50\n",
      "Created a chunk of size 174, which is longer than the specified 50\n",
      "Created a chunk of size 449, which is longer than the specified 50\n",
      "Created a chunk of size 280, which is longer than the specified 50\n",
      "Created a chunk of size 325, which is longer than the specified 50\n",
      "Created a chunk of size 560, which is longer than the specified 50\n",
      "Created a chunk of size 318, which is longer than the specified 50\n",
      "Created a chunk of size 68, which is longer than the specified 50\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[Document(page_content='2024年普通高等学校招生全国统一考试（简称：2024年全国高考），是中华人民共和国合格的高中毕业生或具有同等学力的考生参加的选拔性考试 [1-2]。2024年报名人数1342万人，比2023年增加51万人 [21]。', metadata={'source': './examples/rag.txt'}),\n",
       " Document(page_content='2024年高考是黑龙江、甘肃、吉林、安徽、江西、贵州、广西7个省份（中国第四批高考综合改革省份）的第一届落地实施的新高考。 [3]', metadata={'source': './examples/rag.txt'})]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load the document, split it into chunks, embed each chunk and load it into the vector store.\n",
    "raw_documents = TextLoader('./examples/rag.txt').load()\n",
    "text_splitter = CharacterTextSplitter(separator='\\n\\n\\n', chunk_size=50, chunk_overlap=4)\n",
    "documents = text_splitter.split_documents(raw_documents)\n",
    "documents[:2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from tongyi.embeddings import TongyiEmbeddings\n",
    "from langchain_community.vectorstores import FAISS\n",
    "\n",
    "db = FAISS.from_documents(documents, TongyiEmbeddings())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 相似度检索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "一、在哪里可以了解高考成绩、志愿填报时间和方式、各高校招生计划、往年录取参考等志愿填报权威信息？\n",
      "各省级教育行政部门或招生考试机构官方网站、微信公众号等权威渠道都会公布今年高考各阶段工作时间安排，包括高考成绩公布时间和查询方式、志愿填报时间，以及今年各高校招生计划、往年录取情况参考等权威信息。考生和家长要及时关注本地官方权威渠道发布的消息内容。\n",
      "考生高考志愿是高校录取的重要依据，请广大考生务必按照省级招生考试机构相关要求按时完成志愿填报。前期，教育部已会同有关部门协调互联网平台对省级招生考试机构和高校的官方网站、微信公众号等进行了权威标识，请广大考生在信息查询时认准官方权威渠道，切勿轻信网络不实信息。\n"
     ]
    }
   ],
   "source": [
    "query = \"哪里可以了解高考成绩\"\n",
    "docs = db.similarity_search(query)\n",
    "print(docs[0].page_content)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Document(page_content='一、在哪里可以了解高考成绩、志愿填报时间和方式、各高校招生计划、往年录取参考等志愿填报权威信息？\\n各省级教育行政部门或招生考试机构官方网站、微信公众号等权威渠道都会公布今年高考各阶段工作时间安排，包括高考成绩公布时间和查询方式、志愿填报时间，以及今年各高校招生计划、往年录取情况参考等权威信息。考生和家长要及时关注本地官方权威渠道发布的消息内容。\\n考生高考志愿是高校录取的重要依据，请广大考生务必按照省级招生考试机构相关要求按时完成志愿填报。前期，教育部已会同有关部门协调互联网平台对省级招生考试机构和高校的官方网站、微信公众号等进行了权威标识，请广大考生在信息查询时认准官方权威渠道，切勿轻信网络不实信息。', metadata={'source': './examples/rag.txt'}),\n",
       " Document(page_content='2024年高考是黑龙江、甘肃、吉林、安徽、江西、贵州、广西7个省份（中国第四批高考综合改革省份）的第一届落地实施的新高考。 [3]', metadata={'source': './examples/rag.txt'}),\n",
       " Document(page_content='三、高校招生章程有什么作用，如何查询？\\n高校招生章程由学校依据相关法律规定和国家招生政策制定，是学校开展招生工作的依据。考生在填报志愿前，应仔细查阅拟报考高校的招生章程，全面了解高校招生办法和相关招生要求。\\n主要查询途径有：中国高等教育学生信息网的“阳光高考”信息平台（https://gaokao.chsi.com.cn）；各高校官方招生网站等。', metadata={'source': './examples/rag.txt'}),\n",
       " Document(page_content='二、高考志愿填报咨询有哪些公共服务？\\n教育部高度重视高考志愿填报咨询服务工作，指导各地建立了招生考试机构、高校、中学多方面志愿填报咨询公共服务体系。在教育部层面，首次在“阳光高考平台”推出免费的阳光志愿信息服务系统，将海量数据系统集成，进行个性化匹配推荐，从专业、就业、职业等多方面帮助考生了解学校和专业。同时还将举办“高考志愿填报云咨询周”活动，组织各省级招生考试机构和高校通过文字问答、视频直播等方式，为全国考生和家长提供志愿填报咨询指导公益服务。在各地层面，地方招生考试机构将通过印发志愿填报指导材料、推出志愿填报参考信息服务系统等多种方式为考生提供填报志愿所需的必要信息和服务，包括今年高校招生计划、高校近年录取情况、志愿填报办法和招生录取政策、考生须知等，并通过电视（电台）政策宣讲、线上直播咨询等方式为考生解疑释惑。在学校层面，招生高校会组织开展线上线下咨询活动和在线直播等活动，解读学校招生章程、招生办法和往年录取参考信息，提供各类志愿填报咨询服务；中学会面向考生和家长进行志愿填报培训，及时提供相关部门和高校权威宣传解读资料、发布渠道、发布安排等信息，并组织教师为考生和家长提供针对性地指导服务。\\n考生可以通过所在地省级招生考试机构和各高校官方网站、官方微信公众号或编发的志愿填报指导材料等渠道查询所需参考信息，也可通过拨打当地招生考试机构、高校和中学开通的咨询电话或线上咨询等方式了解相关政策和信息。', metadata={'source': './examples/rag.txt'})]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "docs"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 通过向量的相似度检索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "一、在哪里可以了解高考成绩、志愿填报时间和方式、各高校招生计划、往年录取参考等志愿填报权威信息？\n",
      "各省级教育行政部门或招生考试机构官方网站、微信公众号等权威渠道都会公布今年高考各阶段工作时间安排，包括高考成绩公布时间和查询方式、志愿填报时间，以及今年各高校招生计划、往年录取情况参考等权威信息。考生和家长要及时关注本地官方权威渠道发布的消息内容。\n",
      "考生高考志愿是高校录取的重要依据，请广大考生务必按照省级招生考试机构相关要求按时完成志愿填报。前期，教育部已会同有关部门协调互联网平台对省级招生考试机构和高校的官方网站、微信公众号等进行了权威标识，请广大考生在信息查询时认准官方权威渠道，切勿轻信网络不实信息。\n"
     ]
    }
   ],
   "source": [
    "embedding_vector = TongyiEmbeddings().embed_query(query)\n",
    "docs = db.similarity_search_by_vector(embedding_vector)\n",
    "print(docs[0].page_content)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Maximum marginal relevance search (MMR)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Document(page_content='一、在哪里可以了解高考成绩、志愿填报时间和方式、各高校招生计划、往年录取参考等志愿填报权威信息？\\n各省级教育行政部门或招生考试机构官方网站、微信公众号等权威渠道都会公布今年高考各阶段工作时间安排，包括高考成绩公布时间和查询方式、志愿填报时间，以及今年各高校招生计划、往年录取情况参考等权威信息。考生和家长要及时关注本地官方权威渠道发布的消息内容。\\n考生高考志愿是高校录取的重要依据，请广大考生务必按照省级招生考试机构相关要求按时完成志愿填报。前期，教育部已会同有关部门协调互联网平台对省级招生考试机构和高校的官方网站、微信公众号等进行了权威标识，请广大考生在信息查询时认准官方权威渠道，切勿轻信网络不实信息。', metadata={'source': './examples/rag.txt'}),\n",
       " Document(page_content='2024年高考是黑龙江、甘肃、吉林、安徽、江西、贵州、广西7个省份（中国第四批高考综合改革省份）的第一届落地实施的新高考。 [3]', metadata={'source': './examples/rag.txt'}),\n",
       " Document(page_content='十、录取通知书何时能收到？\\n高校一般会在录取结束后一周左右向录取新生寄发录取通知书。若考生在省级招生考试机构或高校官方网站上查询到了录取结果，一直没有收到录取通知书，可及时联系录取高校公布的招生咨询电话查询本人录取通知书邮寄情况。', metadata={'source': './examples/rag.txt'}),\n",
       " Document(page_content='地区,报名时间\\n北京,2023年10月25日9时至28日17时（进城务工人员随迁子女申请时间为10月10日9时至11日17时）\\n上海,2023年10月16日-19日（每天8:00-21:00）、10月20日（8:00-16:00）\\n天津,2023年11月1日9时至7日17时\\n重庆,2023年10月24日-11月7日\\n河北,2023年10月30日09时至11月13日17时\\n山西,2023年11月5日8:00—10日18:00\\n内蒙古,2023年11月2日9:00至13日18:00\\n山东,2023年11月9日至15日（每天9:00—18:00）\\n江苏,2023年11月1日至3日（8:30-22:00）;11月4日（8:30-17:00）\\n浙江,2023年11月1日9:00至10日17:00\\n江西,2023年11月1日9:00—7日17:00\\n福建,2023年10月25日至30日\\n安徽,2023年10月25日10:00至29日17:00\\n河南,艺术类为2023年11月1日9:00至5日17:00；非艺术类为11月8日9:00至23日17:00\\n湖南,2023年10月23日至31日\\n湖北,2023年11月8日-18日\\n四川,2023年10月14日至20日\\n云南,2023年11月5-15日\\n贵州,2023年11月1日00:00至10日24:00\\n西藏,2023年11月1日至12月1日\\n辽宁,2023年10月27日至10月31日\\n吉林,10月5日—10日（9:00—16:30）\\n黑龙江,10月9日至20日(含节假日)，每日9时至21时\\n陕西,2023年11月1日至7日\\n甘肃,2023年11月1日至10日\\n宁夏,2023年11月1日至5日\\n青海,2023年12月1日—15日（含赴省外就读考生报名）\\n新疆,2023年12月15日前结束\\n海南,2023年11月16日至21日\\n广东,2023年11月1日至10日\\n广西,2023年10月23日至31日17:30', metadata={'source': './examples/rag.txt'})]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "query = \"哪里可以了解高考成绩\"\n",
    "docs = db.max_marginal_relevance_search(query)\n",
    "docs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "langchain",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
